package nameless.aistudy.domain.model.subjects.english.reading.article;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * 专门为聚合根 Article 设计的数据持久化接口，负责聚合的存储和检索。
 */
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface ArticleRepo extends BaseMapper<ArticlePO> {
    /**
     * 插入文章
     *
     * @param article 文章实体
     * @return 插入的记录数 (成功通常为1)
     */
    @Insert("INSERT INTO subject_english_article (title, content, source, is_public, is_deleted, created_at, updated_at) " +
            "VALUES (#{title}, #{content}, #{source}, #{isPublic}, #{isDeleted}, #{createdAt}, #{updatedAt})")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int insertArticle(ArticlePO article);


    /**
     * 分页查询文章列表（仅包含ID和标题）
     *
     * @param page 分页对象
     * @return 包含 ArticleSimpleDTO 的分页结果
     */
    @Select("SELECT id, title FROM subject_english_article " +
            "WHERE is_deleted = 0 " +
            "ORDER BY created_at DESC")
    @Results({
            @Result(property = "id", column = "id"),
            @Result(property = "title", column = "title")
    })
    IPage<ArticleSimpleDTO> selectArticleList(Page<ArticleSimpleDTO> page);
    // 注意：也可以返回 IPage<Map<String, Object>>，但使用DTO更类型安全
}

/**
 * 用于接收文章列表查询结果的简单DTO
 */
class ArticleSimpleDTO {
    private Integer id;
    private String title;

    // 需要 getter 和 setter，如果使用 Lombok 可以用 @Data
    // 或者手动写：
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}